package com.foreknow.domo17;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Manager {
    /**
     * 向文件中写数据
     * 用什么流？是输入流还是输出流？是用字符流还是字节流？
     * FileWriter 节点流
     * BufferedWriter 处理流
     * @param list
     */
    public void writeFile(List<Student> list) {
        //1.创建流对象
        //目标文件
        FileWriter fw = null; //节点流
        BufferedWriter bw = null;
        try {
            fw = new FileWriter("student.txt");
            //创建一个处理流BufferedReader来增强FileReader
            bw = new BufferedWriter(fw);
            Iterator<Student> it = list.iterator();
            // //2.遍历List集合
            while (it.hasNext()){
                //2.1 每遍历一次List就会从中获取到一个学生Student对象
                Student s = it.next();
                //2.2 获取到当前学生Student的信息(是一个字符串：学号 姓名 年龄 学校 电话号)
                String str = s.getSid()+" "+s.getSname()+" "+ s.getAge()+" "+s.getSchool()+" "+s.getPhone();
                //2.3 将这个字符串写到目标文件(Student.txt)
                bw.write(str);
                //2.3 换行
                bw.newLine();
            }
            //3.关闭资源
            bw.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    /**
     * 读取文件中的数据
     * 思考：
     * 1. 返回值类型和参数
     * 2. 什么流？是输入流还是输出流？是用字符流还是字节流？
     * 3. FileReader 节点流
     * 4. BufferedReader 处理流
     * 5. 方法里写什么？如何实现这个方法?
     */
    public List<Student> readFile(String fileName) {
        List<Student> list = new ArrayList<>();
        try {
            //1. 创建输入流对象
            FileReader fr = new FileReader(fileName);
            BufferedReader br = new BufferedReader(fr);
            //2. 读取文件(student.txt)中的一行数据  1001 asdf 12 daf 1212121------理解为对象，但是readLine()返回的是字符串
            String str = null;
            //循环读取文件中的数据
            while ((str = br.readLine())!=null){
                // 1. 先将这个字符串拆分  通过String中的方法来拆分split：String[]
                String[] s = str.split(" ");
                // 2. 再拆分之后的值保存到Student对象中：创建对象然后将拆分之后数据中的元素赋值给Student对象的属性
                Student student = new Student();
                student.setSid(s[0]);
                student.setSname(s[1]);
                student.setAge(Integer.parseInt(s[2])); //需要将字符串通过封装类转换为int类型
                student.setSchool(s[3]);
                student.setPhone(s[4]);
                //3. 将对象保存到List集合中
                list.add(student);
            }
            //释放资源
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
}
